package com.jsmtr.rms.service;

import java.util.List;
import java.util.Map;

import com.jsmtr.rms.entity.DUserResume;
import com.jsmtr.rms.entity.HRZZInterview;
import com.jsmtr.rms.entity.HRZZUser;
import com.jsmtr.rms.entity.ProjectInfo;
import com.jsmtr.rms.entity.ProjectInfoFlow;
import com.jsmtr.rms.entity.UserResume;


public interface IDoZZService {

    /**
     * 获得中专招聘人员信息
     *
     * @param id ID
     * @return HRZZUser
     */
    HRZZUser getUser(String id) throws Exception;

    /**
     * 获得中专招聘人员信息
     *
     * @param ids ID集合
     * @return List<HRZZUser>
     */
    List<HRZZUser> getUsers(String[] ids) throws Exception;

    List<DUserResume> getUsersDuser(String[] ids) throws Exception;

    /**
     * 获得中专应聘者信息
     *
     * @param pid 招聘方案ID
     * @return
     * @throws Exception
     */
    List<Object[]> getUsers(String pid) throws Exception;


    /**
     * 获得当前招聘流程
     *
     * @param fid 当前流程ID
     * @return 招聘流程
     * @throws Exception
     */
    ProjectInfoFlow getCurrentFlow(String fid) throws Exception;

    /*********************推荐********************/

    /**
     * 获得招聘方案中的所有责任部门
     *
     * @param pid 招聘方案ID
     * @return List<Object   [   ]>  部门编码，名称集合
     */
    List<Object[]> getAllDeptInProject(String pid) throws Exception;

    /**
     * 获得招聘方案中某部门的第一条流程
     *
     * @param pid      招聘方案ID
     * @param deptcode 责任部门编码
     * @return ProjectInfoFlow
     */
    ProjectInfoFlow getflow(String pid, String deptcode) throws Exception;

    /**
     * 获得当前招聘流程
     *
     * @param pid      招聘方案ID
     * @param deptcode 责任部门编码
     * @param fid      当前流程ID
     * @return 招聘流程
     * @throws Exception
     */
    ProjectInfoFlow getCurrentFlow(String pid, String deptcode, String fid) throws Exception;

    /**
     * 获得下一招聘流程
     *
     * @param pid      招聘方案ID
     * @param deptcode 责任部门编码
     * @param fid      当前流程ID
     * @return 招聘流程
     * @throws Exception
     */
    ProjectInfoFlow getNextFlow(String pid, String deptcode, String fid) throws Exception;

    /**
     * 获得人员列表
     *
     * @param pid      招聘方案ID
     * @param deptcode 招聘责任部门
     * @param ids      人员id集合
     * @return List<HRZZUser>
     */
    List<HRZZUser> getUsers(String pid, String deptcode, String[] ids) throws Exception;

    /*********************初审********************/

    /**
     * 获得初审人数
     *
     * @param pid      招聘方案ID
     * @param deptcode 责任部门编码
     * @param state    人员状态
     * @return 人数
     */
    int getUserCount(String pid, String deptcode, int state);

    /**
     * 获得招聘方案
     *
     * @param id 招聘方案ID
     * @return ProjectInfo
     */
    ProjectInfo getpProject(String id) throws Exception;


    /*********************面试********************/
    Map<String, Object> getMSUsers(int page, int perpage, HRZZUser user, String fid, String msresult, int notice) throws Exception;

    /**
     * 内部招聘应聘者分页信息
     *
     * @param page     当前页
     * @param perpage  每页显示数
     * @param user     HRZZUser
     * @param fid      招聘流程ID
     * @param msresult 面试结果
     * @param notice   面试计划发布状态
     * @return Map
     */
    Map<String, Object> getMSUsers(int page, int perpage, HRZZUser user, String fid, String msresult, int notice,String msarrange) throws Exception;


    Map<String, Object> getMSUsersMap(int page, int perpage, HRZZUser user, String fid, String msresult, int notice, String msarrange,String scorearea) throws Exception;

    /**
     * 获得面试结果信息
     *
     * @param pid  招聘方案ID
     * @param code 身份证号
     * @return ProjectInfo
     */
    List<HRZZInterview> getHrzzInterviews(String pid, String code) throws Exception;

    /**
     * 获得面试人数
     *
     * @param pid      招聘方案ID
     * @param deptcode 责任部门编码
     * @param msstate  面试状态
     * @param state    初审状态
     * @return 人数
     */
    int getMSUserCount(String pid, String deptcode, String msstate, int state);

    /**
     * 获得个人简历
     *
     * @param code 身份证号
     * @return UserResume
     */
    UserResume getResume(String code) throws Exception;


    /*********************背景调查********************/

    /**
     * 获得背景调查人数
     *
     * @param pid      招聘方案ID
     * @param deptcode 责任部门编码
     * @param zsstate  背景调查状态
     * @param msstate  面试状态
     * @return 人数
     */
    int getZSUserCount(String pid, String deptcode, String zsstate, String msstate);

    /*********************体检********************/

    /**
     * 获得体检时间列表
     *
     * @param pid      招聘方案ID
     * @param deptcode 责任部门编码
     * @return List<String>
     */
    List<String> getTjTimeList(String pid, String deptcode) throws Exception;

    /**
     * 获得体检人员列表
     *
     * @param pid      招聘方案ID
     * @param deptcode 责任部门编码
     * @param tjtime   体检时间
     * @return List<HRZZUser>
     */
    List<HRZZUser> getTjUsers(String pid, String deptcode, String tjtime) throws Exception;

    /**
     * 获得简历数据
     *
     * @param resume 简历实体
     * @param param  条件
     * @return Map
     */
    Map<String, Object> getTjResumes(HRZZUser user) throws Exception;

    /**
     * 获得体检人数
     *
     * @param pid      招聘方案ID
     * @param deptcode 责任部门编码
     * @param tjstate  体检状态
     * @param zsstate  背景调查状态
     * @return 人数
     */
    int getTJUserCount(String pid, String deptcode, String tjstate, String zsstate);

    /*********************岗位分配********************/

    /**
     * 获得岗位分配列表信息
     *
     * @param page
     * @param perpage
     * @param user
     * @return
     * @throws Exception
     */
    Map<String, Object> getPostUsers(int page, int perpage, HRZZUser user) throws Exception;

    /**
     * 获得岗位分配人数
     *
     * @param pid      招聘方案ID
     * @param deptcode 责任部门编码
     * @param gwstate  岗位分配状态
     * @param tjstate  体检状态
     * @return 人数
     */
    int getGWUserCount(String pid, String deptcode, String gwstate, String tjstate);

    /**
     * 获得招聘岗位列表
     *
     * @param pid 招聘方案ID
     * @return List<Object   [   ]>
     */
    List<Object[]> getDemands(String pid) throws Exception;

    /**
     * 获得简历
     *
     * @param code 身份证号
     * @param pid  招聘方案ID
     * @return DUserResume
     */
    DUserResume getResume(String code, String pid) throws Exception;

    /*********************录用********************/
    /**
     * 获得报到时间列表
     *
     * @param pid      招聘方案ID
     * @param deptcode 责任部门编码
     * @return List<String>
     */
    List<String> getBdTimeList(String pid, String deptcode) throws Exception;

    /**
     * 获得报到人员列表
     *
     * @param pid      招聘方案ID
     * @param deptcode 责任部门编码
     * @param bdtime   报到时间
     * @return List<HRZZUser>
     */
    List<HRZZUser> getBdUsers(String pid, String deptcode, String bdtime) throws Exception;

    /**
     * 获得报到人数
     *
     * @param pid 招聘方案ID
     * @return List<Object   [   ]> Object[0]：人数，Object[1]：PROJECT_INFO_JOB 的ID
     */
    List<Object[]> getBdUserCount(String pid) throws Exception;


    /**
     * 获得招聘方案
     *
     * @param id 招聘方案ID
     * @return ProjectInfo
     * @throws Exception
     */
    ProjectInfo getProject(String id) throws Exception;
}
